// npm init 
// npm install express --save
const express = require('express')
const app = express()

// jsonp接口必须配置在cors之前，否则会被拦截（2022.3.16测试没有此问题）, 
//但是在路由中使用时 router后于cors居然没报错
// app.get('/api/jsonp', (req, res) => {
//   const funName = req.query.callback
//   const data = {name: '王五', age: 56}
//   const scriptStr = `${funName}(${JSON.stringify(data)})`
//   res.send(scriptStr)
// })

// CORS跨域问题解决中间件
// 安装：npm install cors
// 导入cors
const cors = require('cors')
app.use(cors()) //注册cors要在router之前，不然跨域报错
// 全局注册cors
// app.use(cors({
//   origin: ['*'],
//   methods: ['*'],
//   allowedHeaders: ['*']
// }))

// 路由模块
const router = require('./router/router.js')
// 注册路由模块
app.use('/api', router)

// 中间件
// app.use() 全局中间件
// 通过定义变量的方式，注册局部中间件mw，调用方式： app.get('/hello', [mw2, mw1], (req, res) => res.send('hello page.'))
// 中间件分类 
  // 应用级别 app.use() app.get() app.post()
  // 路由级别 router.use()
  // 错误级别：项目错误 app.use((err, req, res, next)=>{})
// Express内置中间件 express.static() express.json() express.urlencoded()解析URL-encoded格式的数据
app.use((err, req, res, next) => {
  // 错误中间件
  if(err) {
    console.log('发生了错误' + err.message)
    res.send('Error: ' + err.message)
  }
  let str = '这是全局中间件1'
  console.log(str)
  next()
})
// const mw1 = (req, res, next) => {
//   let str = '这是局部中间件1'
//   console.log(str)
//   next()
// }

// static中间件 静态托管file文件夹下的文件，通过localhost/002.jpeg访问
app.use(express.static('file'))
// 可以自定义文件路由，通过localhost/file/002.jpeg访问
app.use('/file',express.static('file'))

// app.get('/get', [mw1], (req, res) => { //单独使用cors需要定义参数cors()
//   // 单独cors响应头
//   // res.setHeader('Access-Control-Allow-Origin', '*') //解决跨域问题，设置允许指定外域url访问资源 设置'*'任意外域都可访问
//   // res.setHeader('Access-Control-Allow-Headers', 'Content-Type; X-Custom-Header') // 客户端的自定义请求头需要在服务端声明
//   // res.setHeader('Access-Control-Allow-Methods', 'POST, GET, HEAd, DELETE') //除了默认POST, GET, HEAd方法外的方法都需要声明 设置'*'允许任意请求方式

//   let html = '<h2>请求成功</h2>'
//   res.send(html)
// })
// app.post('/post', (req, res) => {
//   res.send('请求成功')
// })

app.listen(80, () => {
  console.log('服务器运行在http://127.0.0.1')
})